package com.smart.community.work.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.time.LocalDate;

/**
 * 请假查询DTO
 * 
 * 严格按照《Java后端SpringBoot代码开发规范_重构版.md》DTO规范实现：
 * - 使用@Data注解：自动生成getter/setter方法
 * - 参数验证：使用JSR-303注解进行参数验证
 * - 完整注释：所有字段都有完整的JavaDoc注释
 * - 序列化支持：实现Serializable接口
 * - 字段命名：使用驼峰命名法
 * - 类型安全：使用具体的类型而不是Object
 * 
 * @author Wu.Liang
 * @since 2025-01-30
 * @version 1.0.0
 */
@Data
@Schema(description = "请假查询参数")
public class LeaveQueryDTO implements Serializable {

    private static final long serialVersionUID = 1L;

    @Schema(description = "用户ID", example = "1")
    private Long userId;

    @Schema(description = "物业公司ID", example = "1", required = true)
    @NotNull(message = "物业公司ID不能为空")
    private Long propertyCompanyId;

    @Schema(description = "请假类型", example = "病假")
    private String leaveType;

    @Schema(description = "请假状态", example = "1")
    private Integer status;

    @Schema(description = "开始日期", example = "2025-01-01")
    private LocalDate startDate;

    @Schema(description = "结束日期", example = "2025-01-31")
    private LocalDate endDate;

    @Schema(description = "申请人姓名", example = "张三")
    private String applicantName;

    @Schema(description = "审批人ID", example = "1")
    private Long approverId;

    @Schema(description = "部门ID", example = "1")
    private Long departmentId;

    @Schema(description = "角色类型", example = "保洁人员")
    private String roleType;
}
